package com.mediocre.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.mediocre.constant.Constant;
import com.mediocre.constant.OptType;
import com.mediocre.dto.PostQueryDTO;
import com.mediocre.dto.ResultDTO;
import com.mediocre.entity.Post;
import com.mediocre.entity.PostHalo;
import com.mediocre.mapper.PostHaloMapper;
import com.mediocre.service.IPostService;
import com.mediocre.service.ITransferService;
import com.mediocre.util.BizUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javafx.geometry.Pos;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

@Api(tags = "3 数据迁移")
@RestController
@Slf4j
@RequestMapping("/api/transfer")
public class TransferController {

    @Autowired
    private ITransferService transferService;

    /**
     * 报错种类：
     * 1. 1分钟内只能发布 3 篇博文
     *      {"errors":["1 分钟内只能发布 3 篇博文，请稍候发布，联系邮箱：contact@cnblogs.com"],"type":0}
     * 2. 不能频繁发起请求，否则报如下错误：
     *      response status -> HTTP/1.1 429 Too Many Requests
     *      response content -> {"errors":["请完成验证码"],"type":0}
     *      （该报错当天一直存在，一直需要验证码，下一天就不报这个错了）
     *      （我尝试发起一个创建请求后，休眠3分钟，再发起下一个创建请求，没问题，当然也可以试试缩短2次请求之间的间隔时间）
     * 3. 不能包含敏感词，否则报如下错误：
     *      HTTP/1.1 400 Bad Request
     *      response content -> {"errors":["文章内容包含敏感词：shadowsocks"],"type":0}
     *
     * @return
     */
    @ApiOperation("导入数据到博客园的随笔")
    @PostMapping("/import")
    public ResultDTO importToCnblogs() throws JsonProcessingException, InterruptedException {
        log.info("method importToCnblogs start");
        // todo: 对比2个post的区别，找出相同标题 且 相同分类的文章，计算数量，进行对比，对比文章内容，进行合并；
        // todo: 对比2个post的区别，找出不同标题 或者 不同分类的文章，计算数量，然后将该类文章从halo导入到cnblogs
        transferService.importToCnblogs();
        log.info("method importToCnblogs end");
        return new ResultDTO("successfully imported data! ");
    }

    @ApiOperation("从博客园导出随笔（暂时用不到，不开发）")
    @PostMapping("/export")
    public ResultDTO exportFromCnblogs() {
        log.info("method exportFromCnblogs start");
        log.info("method exportFromCnblogs end");
        return new ResultDTO("successfully exported data! ");
    }
}
